using System;
using protobuf.Account;
using UI;

namespace Core.Net
{
    public partial class NetManager
    {
        #region 断线重连窗口开关处理

        private ServerErrorDealType _preNetMessageBoxType = ServerErrorDealType.None;

        public enum NetRPCMessageBox //网络MB消息框等级，越大越优先
        {
            None = 0,
            RetryRPCMessageBox = 1, //网络不稳定，是否重连？ 
            ReconnectFailedBackToLogin = 2, //网络数据已经断开，请重新登录 
        }

        /// <summary>
        /// 预检查消息框,如果有消息框已经打开的，需要根据等级判定关闭之前的或者无视请求
        /// </summary>
        private bool PreCheckNetMessageBox(ServerErrorDealType type)
        {
            //如果没有打开UIMb,检查通过
            //如果打开了，等级高的关闭低的。
            var lastType = _preNetMessageBoxType;
            if (type <= lastType) return false;
            return true;
        }
        
        

        //检查是否有某个类型的网络消息框
        public bool CheckHasNetMessageBox(ServerErrorDealType type)
        {
            return type == _preNetMessageBoxType;
        }

        /// <summary>
        /// 显示重连失败，跳转回登录页面
        /// </summary>
        public void ShowReconnectFailedBackToLogin()
        {
            //UIManager.inst.messageBox.ShowOK("网络数据已经断开，请重新登录", GameManager.inst.ReLogin);
        }

        #endregion

        /// <summary>
        /// 直接跳转到登录页面
        /// </summary>
        public void BackToLogin()
        {
            GameManager.inst.ReLogin();
        }

        /// <summary>
        /// 打开一个断线重连的BOX
        /// </summary>
        public void OpenRetryRPCMessageBox(RPCAsyncResult res)
        {
            // UIManager.inst.messageBox.ShowOKCancel("网络不稳定，是否重连？", () =>
            // {
            //     if (res == null)
            //     {
            //         Reconnect((success, loginData) =>
            //         {
            //             if (!success)
            //             {
            //                 ShowReconnectFailedBackToLogin();
            //             }
            //         });
            //     }
            //     else
            //     {
            //         HandleRPCACKErrorCodeHelper(SceneSpecialServerErrorDeal_OnReconnect);
            //         DoReconnectWithRPCResend(res);
            //     }
            // }, GameManager.inst.ReLogin);
        }

        public void ReconnectWithMessageBoxUntilSuccess(RPCAsyncResult exceptRpcResult, Action onSuccess)
        {
            Reconnect((success, loginData) => { OnReconnectCallBack(exceptRpcResult, onSuccess, success, loginData); }, exceptRpcResult);
        }

        private void OnReconnectCallBack(RPCAsyncResult exceptRpcResult, Action onSuccess,bool success, OnlineModel loginData)
        {
            if (success)
            {
                onSuccess();
            }
            else
            {
                // UIManager.inst.messageBox.ShowOKCancel("网络不稳定，是否重连？", () =>
                // {
                //     ReconnectWithMessageBoxUntilSuccess(exceptRpcResult, onSuccess);
                // },GameManager.inst.ReLogin);
            }
        }
    }
}